/*
  负责将子组件挂载到 Portal 系统中
  主要功能：
  在组件挂载时通过 manager.mount() 注册内容

  在更新时通过 manager.update() 更新内容

  在卸载时通过 manager.unmount() 移除内容

  自身不渲染任何内容（返回 null）
*/

import React from 'react'
import {PortalMethods} from './PortalHost'

export type PortalConsumerProps = {
  manager: PortalMethods
  children: React.ReactNode
}

export default class PortalConsumer extends React.Component<PortalConsumerProps> {
  _key: any

  componentDidMount() {
    if (!this.props.manager) {
      throw new Error('Looks like you forgot to wrap your root component with `Provider``.\n')
    }

    this._key = this.props.manager.mount(this.props.children)
  }

  componentDidUpdate() {
    this.props.manager.update(this._key, this.props.children)
  }

  componentWillUnmount() {
    this.props.manager.unmount(this._key)
  }

  render() {
    return null
  }
}
